java8 Stream流操作介绍

本文介绍了Java8中的Stream流操作,包括创建Stream、转换Stream以及聚合操作。通过Stream可以简化集合处理的代码,例如使用distinct进行去重,使用collect进行收集,使用reduce、count、allMatch等进行其他类型的汇聚操作。
摘要由CSDN通过智能技术生成

流操作在本人接触到的部分,都是处理集合容器Collection,加入流操作主要是为了函数式编程,在很大程度上可以简化代码

简洁的代码处理复杂逻辑这是每个程序猿的追求,废话不多说,开始介绍

使用Stream基本步骤

1. 创建Stream;
2. 转换Stream,每次转换原有Stream对象不改变,返回一个新的Stream对象(**可以有多次转换**);
3. 对Stream进行聚合(Reduce)操作,获取想要的结果;

Stream 创建

//Lists是Guava中的一个工具类
List<Integer> nums = Lists.newArrayList(1,null,3,4,null,6);
nums.stream().filter(num -> num != null).count();
<pre name="code" class="java">/**
of方法:有两个overload方法,一个接受变长参数,一个接口单一值
*/
Stream<Integer> integerStream = Stream.of(1, 2, 3, 5);
Stream<String> stringStream = Stream.of("taobao");
/**
generator方法:生成一个无限长度的Stream,其元素的生成是通过给定的Supplier
*/
Stream.generate(new Supplier<Double>() {
   	@Override
   	public Double get() {
		return Math.random();
	}
});
Stream.generate(() -> Math.random());
Stream.generate(Math::random);
   
/**
iterate方法:也是生成无限长度的Stream,和generator不同的是,其元素的生成是重复对给定的种子值(seed)
调用用户指定函数来生成的。其中包含的元素可以认为是:seed
*/
Stream.iterate(1, item -> item + 1).limit(10).forEach(System.out::println);


 

所有集合类都可以直接调用stream()方法返回一个Stream对象

这个在本文的第一个例子中就展示了从List对象获取其对应的Stream对象,如果查看Java doc就可以发现Collection接口有一个stream方法,所以其所有子类都都可以获取对应的Stream对象。

public interface Collection<E> extends Iterable<E> {
    //其他方法省略
	default Stream<E> stream() {
        return StreamSupport.stream(spliterator(), false);
    }
}
转换Stream
转化Stream方法有很处理方法,此处全部介绍,介绍几种,其余方法的使用都差不多

1. distinct: 对于Stream中包含的元素进行去重操作(去重逻辑依赖元素的equals方法),新生成的Stream中没有重复的元素;

List<String> list = Arrays.asList("aa"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值